家に帰る時に、家族のLINEに「今から帰る」とメッセージを送りたいんだけど、iOSのショートカットだと、メッセージ文面をいちいち入力する必要がある。そこで、LINEのメッセージ送信は、IFTTT に任せることにして、スマホでショートカットなり、ショートカットのオートメーションから、LINEメッセージ送信を起動したい。
また、IFTTTの JSON形式を返すWebhook trigger だと、safari が開いたままになるので、webhook trigger を起動し、x-callback-url を返す trigger ページを作ってみた。
<?php
// IFTTTのwebhookトリガを呼出す
// x-callback-url の機能で呼び出し側(shortcut)に戻る
// ifttt webhook url
$ifttt_webhook = "https://maker.ifttt.com/trigger/%s/with/key/xxxxxxxxxxxxxxxxx_xxxxxx" ;
$mykey = "yyyyyyyyyyyyyyyyyyyyyy" ;
// パラメータを読み込む
$key = isset( $_GET[ "K" ] ) ? $_GET[ "K" ] : "" ;
$command = isset( $_GET[ "C" ] ) ? $_GET[ "C" ] : "" ;
$json = file_get_contents( "php:input" ) ;
// 想定外の接続は無視
if ( $_SERVER['HTTPS'] != 'on' || $key != $mykey )
exit( 1 ) ;
// 時間によるwebhook呼出し制限の前処理
$localtime = localtime( time() , true ) ;
$l_hour = $localtime[ "tm_hour" ] ;
$l_week = $localtime[ "tm_wday" ] ;
// webhookの呼出し
function post_webhook( $trigger , $json ) {
global $ifttt_webhook ;
$url = sprintf( $ifttt_webhook , $trigger ) ;
$opts = array(
'http' => array(
'method' => 'POST' ,
'header' => 'Content-type: application/json; charset=UTF-8' ,
'content' => $json ) ) ;
$context = stream_context_create( $opts ) ;
header( "Content-Type: application/json; charset=utf-8" ) ;
// x-callback-urlで処理後はショートカットに戻す
header( "Location: shortcuts://" ) ;
// IFTTTのtriggerを呼出す
print file_get_contents( $url , false , $context ) ;
}
// GETパラメータで呼び出しするwebhookを切り替え
if ( $command == "go_home" ) {
// ショートカットからの呼出し用
// go_homeリクエストを中継
post_webhook( "go_home" , $json ) ;
} else if ( $command == "go_home_time" ) {
// オートメーションからの呼出し用
// 平日の帰宅時間のみ中継
if ( 17 <= $l_hour && $l_hour < 21
&& 1 <= $l_week && $l_week <= 5 )
post_webhook( "go_home" , $json ) ;
else
exit( 0 ) ;
} else {
exit( 1 ) ;
}
header( "Content-Type: application/json; charset=utf-8" ) ;
?>
