MicrosoftBotFrameworkのRESTAPIをPHPで SKYPEに悲しい言葉を吐くボット


引用元

MicrosoftBotFrameworkのRestAPIを使ったTimerBot
大体はnyasba様の内容をゆるくPHPで書いた感じです。

実例

<?php
//トークンを取得する
$head = [];
$head[] = 'Content-Type: application/x-www-form-urlencoded';

$body = array();
$body['grant_type'] = 'client_credentials';
$body['client_id'] = '*******';
$body['client_secret'] = '*******';
$body['scope'] = 'https://graph.microsoft.com/.default';

$ch = curl_init('https://login.microsoftonline.com/common/oauth2/v2.0/token');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
// 実行
$res = curl_exec($ch);
// エラーが発生したらとめる
if (!empty(curl_error($ch))) {
    var_dump(curl_error($ch));
    exit();
}
// ハンドルを閉じる
curl_close($ch);
$tmp = json_decode($res);

$token = $tmp->access_token;
//トークンが取れたのでボットにランダムに悲しい言葉を吐かせる
$messages = [
        '作り直すしかないね…',
        '予算がね…',
        '時間がね…',
        '見積もりがね…',
        'このバグ根が深いです',
        'なんでこうなったの?',
        '用意していないです。',
        'えっ!今の作業って無駄ってことですか?'
];

$body = array();
$body['type'] = 'message/text';
$body['text'] =  $messages[array_rand($messages)];

$head = [];
$head[] = 'Authorization: Bearer '.trim($token);
$head[] = "Content-Type: application/json";
$body = array();
$body['type'] = 'message/text';
$body['text'] = $messages[array_rand($messages)];
$ch = curl_init('https://api.skype.net/v3/conversations/'.urlencode('/get name の値').'/activities/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$res = curl_exec($ch);
// エラーが発生したらとめる
if (!empty(curl_error($ch))) {
    var_dump(curl_error($ch));
    exit();
}
// ハンドルを閉じる
curl_close($ch);

あとはcrontabにでも放り込めばて定期的にメッセージをPOSTしてくれます。

実際のとこはCURLでできてしまうので、特にPHPで書く理由もあまりなかったりします。
ここからまじめに書いていけばChatOpsのインターフェイスとしてSKYPEは悪い選択肢ではないかなと思ってきました。

あとまだ勉強中ですがMicrosoftBotFrameworkはslackにも対応しているようなので横断的なbot構築を考えるとなかなかいんじゃないかと