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

今回の 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)

トラックバック(0)

このブログ記事を参照しているブログ一覧: LINE にメッセージを返す Perl プログラム

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5596

コメントする

このブログ記事について

このページは、shinodaが2020年5月12日 20:13に書いたブログ記事です。

ひとつ前のブログ記事は「PSGI も初めてだったんで、LINE API のテストにハマった」です。

次のブログ記事は「玄関で焚き火してビール」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら