質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1133閲覧

Line Bot PHP SDKの templateMessageBuilderが動かない

hanachan1026

総合スコア12

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/12 05:31

###前提・実現したいこと
PHPを使ってのLine Bot作成に当たってtemplate message(ボタンやConfirmメッセージなど)のテストを行いたいと思っています。
しかし、以下のようなエラーが出ています。

###発生している問題・エラーメッセージ

PHP Fatal error: Uncaught Error: Call to a member function buildTemplateAction() on array in /app/vendor/linecorp/line-bot-sdk/src/LINEBot/MessageBuilder/TemplateBuilder/ConfirmTemplateBuilder.php:65

###該当のソースコード

PHP

1// Confirmテンプレートを使うためのメソッドです。 2function replyConfirmTemplate($bot, $replyToken, $alternativeText, $text, ...$actions) { 3 $actionArray = []; 4 foreach ($actions as $value) { 5 array_push($actionArray, $value); 6 } 7 $builder = new \LINE\LINEBot\MessageBuilder\TemplateMessageBuilder( 8 $alternativeText, 9 // Confirmテンプレートの引数はテキスト、アクションの配列 10 new \LINE\LINEBot\MessageBuilder\TemplateBuilder\ConfirmTemplateBuilder($text, $actionArray) 11 ); 12 $response = $bot->replyMessage($replyToken, $builder); 13 if (!$response->isSucceeded()) { 14 error_log('Failed!' . $response->getHTTPStatus . ' ' . $response->getRawBody()); 15 } 16 }

PHP

1// 上記メソッドを呼び出しているところです。 2function __construct() { 3 4 $json_string = file_get_contents('php://input'); 5 $jsonObj = json_decode($json_string); 6 $this->userId = $jsonObj->{"events"}[0]->{"source"}->{"userId"}; 7 $this->replyToken = $jsonObj->{"events"}[0]->{"replyToken"}; 8 9 $this->httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient($this->token); 10 $this->bot = new \LINE\LINEBot($this->httpClient, ['channelSecret' => $this->secret]); 11 12 $this->replyConfirmTemplate( 13 $this->bot, 14 $this->replyToken, 15 "test", 16 "test", 17 [ 18 [ 19 "type" => "message", 20 "label" => "Yes", 21 "text" => "Yes", 22 ], 23 [ 24 "type" => "message", 25 "label" => "No", 26 "text" => "No", 27 ], 28 ] 29 ); 30}

###試したこと
TemplateMessageをつかわずに、おうむ返しをするだけのBotなら動くので、Tokenなどの認証に問題はありません。

Herokuにデプロイしているのでheroku logs -tでログを見て、第5引数のArrayを二つに分けてみたりしましたが動きません。

###補足情報(言語/FW/ツール等のバージョンなど)
line公式のmessaging api用sdk
https://github.com/line/line-bot-sdk-php

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GitHubのコードを読んでみた感じでは、ConfirmTemplateBuilder のコンストラクタの第2引数は「TemplateActionBuilderの配列」を要求しているようです。

今回はmessaageタイプのアクションを入れる想定っぽいので、MessageTemplateActionBuilderのインスタンスの配列を渡して上げればいいんじゃないかと思います。

php

1 $this->replyConfirmTemplate( 2 $this->bot, 3 $this->replyToken, 4 "test", 5 "test", 6 [ 7 new \LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder("Yes", "Yes"), 8 new \LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder("No", "No"), 9 ] 10 ); 11

投稿2017/07/12 12:06

attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanachan1026

2017/07/12 14:54

ありがとうございます!動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問