電気ウナギ的○○

About Home

LINE にメッセージを返す Perl プログラム

shinoda (2020年5月12日 20:13)
今回の LINE API テストにつかった Perl ソース(PSGI 対応)の bot.psgi を載せておく。
API リファレンスに載っているソース例を元に作成した。
前回のエントリーを書いてから、メッセージの出力を追加してるけど)

use strict;
use warnings;
use utf8;
use LINE::Bot::API;
use LINE::Bot::API::Builder::SendMessage;
use Plack::Request;

my $channel_secret = '84xxxxxxxxxxxxxxxxxxxxxxxxxxxxec';
my $channel_access_token = '8sXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcDnyilFU=';

my $bot = LINE::Bot::API->new(
channel_secret       => $channel_secret,
channel_access_token => $channel_access_token,
);

sub {
my $req = Plack::Request->new(shift);

unless ($bot->validate_signature($req->content,
$req->header('X-Line-Signature'))) {
return [200, [], ['bad request']];
}

my $events = $bot->parse_events_from_json(
$req->content);
foreach my $event (@{ $events }) {
if ($event->is_user_event && $event->is_message_event
&& $event->is_text_message) {

my $messages = LINE::Bot::API::Builder::SendMessage->new;
$messages->add_text( text => $event->text );
$messages->add_text( text => 'って言ったのね?');
my $res = $bot->reply_message($event->reply_token,
$messages->build);
}
}

return [200, [], ["OK"]];
};

これで、

20200512_line1.jpg

こんな感じに、ユーザが入力した文字を復唱したあとで、「って言ったのね?」と問いかけるウザい形に(笑)。

ポイントは、use utf8 と宣言して、プログラム内に記述される文字列リテラルがすべて「flagged utf8」(utf8 フラグ有効)になるようにすること。
LINE Messaging API に送る文字列は utf8 フラグ有効にしたものでないと駄目。use utf8 してないと、LINE 画面で文字化けする。

まあ、use Encode 宣言して、ひとつひとつ Encode::decode('utf8', 'って言ったのね?') という具合にしても(多分)一緒だけど。いちいちするのは面倒なので、use utf8 した方がいいだろう。

さて、LINE がらみの提案をしたいお客さんのサーバでは PSGI サーバが使えないので、CGI 版に直してみるかな。

<追記>
ちょっとソースを転記したとき、コピーミスがあったので修正した(2020/05/13 12:00)

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5596

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE