ホーム » コンピュータ » iOS » IFTTTのwebhooksトリガーでLINEメッセージ送信

システム

最近の投稿

アーカイブ

カテゴリー

IFTTTのwebhooksトリガーでLINEメッセージ送信

家に帰る時に、家族の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" ) ;
?>