Help us understand the problem. What is going on with this article?

BotMan for ChatWork

More than 1 year has passed since last update.

作り始めた所。

BotMan

The only PHP chatbot framework you will ever need.

https://botman.io/

BotMan を Laravel に導入済にして用意してあるのが BotMan Studio

https://github.com/botman/studio

今回は BotMan Studio を元に作っていった。

ChatWork Webhook

BotMan のデフォルトでは当然 ChatWork はない。ChatWork はこういう所が弱すぎる。少し前に Webhook 対応してやっと Chat bot 的なものを作れるようになった。

http://developer.chatwork.com/ja/webhook.html

調べた結論としては Webhook は アカウントイベントルームイベント があり

  • アカウントイベントご自身へのメンション(mention_to_me)
  • ルームイベントメッセージ作成(message_created)メッセージ更新(message_updated)

一つの Webhook 設定で両方のイベントが飛んでくることはないので両方使うなら Webhook を2つ作る。
bot へのメンション時にのみ発動させるなら アカウントイベント だけでもいい。
両方使うと bot へのメンションで mention_to_me と message_created 両方発動するので一つのほうがいいかもしれない。

作ったものとデモ

基本的な使い方

導入は GitHub 見てなんとかしてもらうとして…
Chat bot としての動作をどこに書くか。

書く場所としては2つ。

routes/botman.php

<?php
$botman = resolve('botman');

$botman->hears('Hi', function ($bot) {
    $bot->reply('Hello!');
});

Laravel のルーティングと大体同じなので分かりやすい。

クロージャではなくクラスで指定もできる。クラスの置き場所はどこでもいい。

$botman->hears('laravel version', 'App\Botman\LaravelCommand@version');

bot へのメンションで laravel version と書けば GitHub API を使って取得した Laravel の最新バージョンを返すコマンド。
Laravel ベースだとなんでもできるのがメリット。Lambda とかでも作れるけど不慣れだと後からメンテできなくなる可能性が高い。

webルーティングからコントローラー

routes/web.php

Route::match(['get', 'post'], '/botman', 'BotManController@handle');

コントローラー内に書いている。

    /**
     * Place your BotMan logic here.
     */
    public function handle()
    {
        $botman = app('botman');

        //$botman->hears();

        $botman->listen();
    }

webhook で指定するのは /botman のURL。

どっちかを使うかは別にどっちでもいいはずだけどたぶん botman.php。/botman へのリクエストで BotMan が発動(listen)、実際の動作の細かいことは botman.php。

開発

困るのは開発時。ローカルサーバーでは当然 webhook は飛んで来ないのでやりにくい。
コマンド作るのを試してみたいという人がもしいれば ChatWork に参加して botman-chatwork-project のほうにプルリク送れば試せるようにする。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away