【開発者ブログ】PHPでChatGPT APIを触ってみた話と、アプリメンバーズ連携のメモ

こんにちは、アプリメンバーズ開発部の久保見です。

このブログでは、システム開発を進める中で「学んだこと」「考えたこと」を、できるだけ手触り感のある形で共有していこうと思います。

今回は、PHPからChatGPT APIを叩いてみた話と、アプリメンバーズのトーク機能との連携についてまとめました。

1. ChatGPT APIをPHPから呼び出す

昨今「AI」と言えば、真っ先に思い浮かぶのが ChatGPT ではないでしょうか。

通常はウェブサイトやアプリから、ユーザーが質問を入力して回答を得る形で利用しますが、ChatGPTはAPIが公開されており、システム側からも簡単に呼び出すことができます。

ITベンダーとして、こうしたAPIを自社サービスと組み合わせて使う場面は今後さらに増えていくはずです。

実装自体はとてもシンプルで、10分もあれば動作確認できるレベルです。

1-1. APIキーを発行する

まずは、ChatGPT APIを利用するための APIキー を発行します。

OpenAI Platform に登録
https://platform.openai.com/

登録後、以下のページにアクセス
https://platform.openai.com/api-keys

「Create new secret key」ボタンからAPIキーを発行

発行したキーは、後続のPHPコード内で使用します。

1-2. PHPでChatGPT APIを叩くサンプル

以下が、PHPからChatGPT API(chat/completions)を呼び出すシンプルなサンプルコードです。

「chat/completions」はチャットのやりとりをそのままAPIで再現するための入口で、やりとりの流れ(system=ルール、user=質問、assistant=回答)をまとめて送れるのが特徴です。

これにより、ChatGPTに「こういう役割で答えてね」と前提を渡したうえで、会話の続きを生成してもらうことができます。

// --- 取得したキーを設定 ---
$api_key = 'your_key';

// --- ChatGPTエンドポイント ---
$url = 'https://api.openai.com/v1/chat/completions';

// --- 送信データ ---
$data = [
    'model' => 'gpt-4o-mini',
    'messages' => [
        [
            'role' => 'system',
            'content' =>
                "あなたは『〇〇店』の管理者です。
                 定休日は毎週 火曜 と 金曜。
                 営業時間は 10:00〜19:00。
                 ユーザーの質問には、この店舗の管理者として回答してください。"
        ],
        [
		  'role' => 'user',
		  'content' =>
		      "明日は営業していますか?"
		]
    ],
    'max_tokens' => 200
];

// --- CURL初期化 ---
$ch = curl_init($url);

// --- CURLオプション設定 ---
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $api_key,
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// --- 実行 ---
$response = curl_exec($ch);

// --- エラー処理 ---
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
    exit;
}
curl_close($ch);

// --- 結果表示 ---
$result = json_decode($response, true);

echo $result['choices'][0]['message']['content'] ?? 'No response';

messagesrole => system で、店舗の基本情報や話し方などの「前提条件」を渡しているのがポイントです。

たとえば「店舗の担当者として答える」「お嬢様口調で話す」など、キャラクター付けもここで行えます。

APIの呼び出し方が分かったので、次は実際にアプリメンバーズのトーク機能と組み合わせてみます。

イメージとしては

  • ユーザーがアプリのトーク画面にメッセージを送る
  • その内容をサーバー側で受け取る
  • ChatGPT APIに投げて回答を生成
  • 生成された回答を、アプリメンバーズのトークAPIでユーザーに自動返信する

という流れです。

アプリメンバーズ側にもトークAPIを用意しているので、それを使って自動返信を実装します。

2. ChatGPTの回答をトークに投稿するサンプル

// --- ChatGPTのAPIで取得した回答 ---
$talk = $result['choices'][0]['message']['content'] ?? '';

// --- アプリメンバーズトーク機能POST先URL ---
$api_url = 'https://api.ajg.jp/api/Talk.php?id=Kb01gt6qnpawf08';
$no = getno(); //トークユーザーの会員番号(関数てきとうです)

// --- 送信データ ---
$post_data = [
    'talkType'    => 1,
    'talk'        => $talk,
    'sendType'    => 1,
    'targetFlag'  => 2,
    'targetList'  => [
        [
            'customerNo' => $no
        ]
    ]
];

// --- cURL 初期化 ---
$ch = curl_init($api_url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'MyApp/1.0 (ChatGPT-Connector)');

$response = curl_exec($ch);
if(curl_errno($ch)) {
    echo 'Talk API Error: ' . curl_error($ch);
    exit;
}
curl_close($ch);

echo $response;

これで、トークに対して自動で返答する仕組みが一通り完成します。

少ない工数で、かなり「それっぽい」自動応答機能を実現できるのは、大きな魅力だと感じています。

3. Webサービスに組み込むときの注意点

一方で、Webサービスのチャット機能にそのままChatGPT APIを使う場合、いくつか注意すべきポイントがあります。

3-1. 想定外の回答・誤情報

ChatGPTは学習データに基づいて回答を生成するため、必ずしも正しい情報だけを返すわけではありません。

「誤った日付」「おかしな日本語」「事実と異なる内容」などが混ざる可能性があります。

対策例

  • system メッセージで「役割」「前提条件」「NG事項」をしっかり指定する
  • 営業時間・料金など、重要な情報は自社DB側を正とし、サーバーで補正する

3-2. 不適切な内容(差別・攻撃・性的表現など)

文脈によっては、ユーザーが不快に感じる表現が出てしまうリスクもゼロではありません。

対策例

  • system で「攻撃的・差別的・性的な表現は禁止」といったポリシーを明記
  • 返却テキストに対して独自のNGワードチェックやログ監査を行う

3-3. 個人情報・機密情報の取り扱い

ユーザーの氏名や住所などの生の個人情報をそのままAPIに送る設計は避けるべきです。

外部サービスに個人情報を送るということは、「自社の外に個人情報が出ていく」=漏えい経路が増えるためです。

対策例

  • 可能な限りIDや番号に置き換える(anonymize)
  • 不要な情報は送らない。トーク内容と「会員番号」程度に留めるなど、最小限の連携を意識する

3-4. レスポンス時間・通信エラー

API呼び出しは数百ミリ秒〜数秒かかることがあり、ネットワークや障害で返ってこない場合もあります。

対策例

  • 適切なタイムアウト値を設定する
  • タイムアウトやエラー時は、「ただいま混み合っております。時間をおいてお試しください。」など、フォールバック用の固定メッセージを返す

ここでいう「適切なタイムアウト値」とは、「最大でも何秒まで待つか」をあらかじめ決めておくことで、処理の「待ちっぱなし」を防ぐための設定を指します。

3-5. 利用量・課金のコントロール

無料枠を超えるとリクエストが失敗したり、ユーザー数が増えるほど課金額も大きくなります。

対策例

  • 利用回数やトーク内容をログで管理し、上限を設ける
  • 重要度の低い処理には別の仕組みを使う、時間帯で制限するなどの運用ルールも検討する

おわりに|アプリメンバーズとの連携アイデアも歓迎です

このように、ChatGPT APIは少ないコードで導入できる一方、設計や運用面で考えるべきポイントも多い技術です。

アプリメンバーズでも、外部サービス連携用のAPIを随時拡張しています。

「自社の会員アプリにAIチャットを組み込みたい」「トーク機能をもっと便利にしたい」といったご相談があれば、ぜひお気軽にお声がけください。

今後も、開発現場でのトライ&エラーや実装の小ネタなどを、このブログで共有していきます。

お問合せ&資料請求