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

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

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

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

sakura.io

sakura.ioは、さくらインターネット社が開発、提供しているIoTのプラットフォームです。通信モジュールからデータの保存や連携まで、ネットワークとデータのやり取りに必要な機能を統合的に提供しています。

PHP

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

Q&A

解決済

3回答

3547閲覧

LineBotで定型の返信が返ってこない

ususio_pooh

総合スコア1

LINE Messaging API

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

sakura.io

sakura.ioは、さくらインターネット社が開発、提供しているIoTのプラットフォームです。通信モジュールからデータの保存や連携まで、ネットワークとデータのやり取りに必要な機能を統合的に提供しています。

PHP

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

0グッド

0クリップ

投稿2020/09/06 07:45

前提・実現したいこと

趣味でLineBotの勉強中です。
"おもしろまじめなチャットボットを作ろう"という本で勉強しています。

Line上で入力された適当な言葉に対して"hello"と返すコードですが
何を入力しても"Hello"と返ってきません。

確認したいことは以下の2点です。
1. 下記に示すlog中[result]に関する出力がありますが、この出力の表記が通信できているのか
通信できていないのか判断ができないです。
2.レンタルサーバーとしてさくらのレンタルサーバーを使用しております。こちらの
レンタルサーバーはcurlの機能は使えるのでしょうか?(一応phpinfo()にて確認しましたが、'enable'となっているため使えるものと考えておりますが...)

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

phpでdebug.txtに入力、出力の情報を書き出しています。
以下のlogが出力されています。

[input] {"events":[{"type":"message","replyToken":"1dde07c2da904b5d98c3361e8cf47296","source":{"userId":"U2df22e7ddc417545b5dd8e15c13bf197","type":"user"},"timestamp":1599375528883,"mode":"active","message":{"type":"text","id":"12630624461427","text":"d"}}],"destination":"U3f0a01386451f3bfcee30416af01b3cb"} [output] {"replyToken":"1dde07c2da904b5d98c3361e8cf47296","messages":[{"type":"text","text":"hello"}]} [result] {"message":"Authorization header required. Must follow the scheme, 'Authorization: Bearer <ACCESS TOKEN>'"}

該当のソースコード

php

1<?php 2 3//チャネルアクセストークン 4define('TOKEN', 'ここにLINRのチャネルアクセストークンを入れています'); 5//logファイルの削除 6if(file_exists(DEBUG)) unlink(DEBUG); 7 8//ログファイルへの追加 9function debug($title,$text){ 10 file_put_contents(DEBUG, '['.$title.']'."\n".$text."\n\n", FILE_APPEND); 11} 12 13function post($url, $object){ 14 //JSON形式への変換 15 $json=json_encode($object); 16 debug('output', $json); 17 18 //送信の準備 19 $curl=curl_init('https://api.line.me/v2/bot/message/'.$url); 20 21 curl_setopt($curl. CURLOPT_POST, true); 22 curl_setopt($curl. CURLOPT_POSTFIELDS, $json); 23 curl_setopt($curl. CURLOPT_HTTPHEADER, [ 24 'Content-Type: application/json', 25 'Authorization: Bearer'.TOKEN 26 ]); 27 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 28 29 //送信の実行 30 $result=curl_exec($curl); 31 debug('result', $result); 32 33 //送信の終了 34 curl_close($curl); 35} 36 37function reply($event, $text){ 38 //送信データの作成 39 40 $object=[ 41 'replyToken'=>$event->replyToken, 42 'messages'=>[['type'=>'text', 'text'=>$text]] 43 ]; 44 45 //送信 46 post('reply', $object); 47} 48 ?> 49

試したこと

LINE developperのページからwebhookURLで指定したソースコードにエラーが出ない(Verifyが'success'である)ことを確認
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);をコメントアウトし、[result]出力が1になることを確認

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

(translate.google.co.jp)Authorization header required. Must follow the scheme

承認ヘッダーが必要です。 スキームに従う必要があります

ということなので、リクエスト時のヘッダーを疑いましょう。

The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)- 2.1. Authorizationリクエストヘッダフィールド

credentials = "Bearer" 1*SP b64token

と定義されています。"Bearer" と b64token の間に 1つのspaceが必要です。

半角空白がありません。

'Authorization: Bearer '.TOKEN

投稿2020/09/06 10:03

編集2020/09/06 10:07
Y.H.

総合スコア7918

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

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

ususio_pooh

2020/09/06 12:30

回答ありがとうございます。 以下の形に直しましたが同様のlogになります。 curl_setopt($curl. CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer '.TOKEN ]); アクセストークンのあたりが間違っていそうとは思うのですが... 張っていただいたURLは見ていなかったのでここからヒントを探してみます。
Y.H.

2020/09/06 13:12

エラーメッセージは同じ「Authorization header required.」なのでしょうか?変わってるはずなんですが…
ususio_pooh

2020/09/12 07:50

同じエラーメッセージでした。 いろいろ見直すと以下の点を変更することで解決しました。 $cur1. と記述していましたが$cur1, が正解です。 -> ,を.に変更 ご助力ありがとうございました。
guest

0

[result]

{"message":"Authorization header required. Must follow the scheme, 'Authorization: Bearer <ACCESS TOKEN>'"}

とあるように、アクセストークンの指定ができていません。ソースでは'Authorization: Bearer'.TOKENと指定されていますが、Bearerとトークンの間に空白が必要です。

PHP

1//'Authorization: Bearer'.TOKEN //誤 2'Authorization: Bearer '.TOKEN //正

投稿2020/09/06 09:59

draq

総合スコア2577

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

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

ususio_pooh

2020/09/06 12:34

回答ありがとうございます。 半角スペースを空けて以下のように訂正しましたが同様のlogになります。 curl_setopt($curl. CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer '.TOKEN ]); 半角スペース->全角スペースなど変えて試してみても変わらずでした。 何かほかに考えられるところがあれば教えていただきたいです。
guest

0

$cur1の後の . を, にすることでかいけついたしましt

curl_setopt($curl. CURLOPT_POST, true); curl_setopt($curl. CURLOPT_POSTFIELDS, $json); curl_setopt($curl. CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer'.TOKEN ]); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $json); curl_setopt($curl, CURLOPT_HTTPHEADER,[ 'Content-Type:application/json', 'Authorization:Bearer '.TOKEN ]);

投稿2020/09/12 07:51

ususio_pooh

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問