SurveyGateアンケートへのアクセス
本セクションでは、Quick Startの「Step2:SurveyGateアンケートへのアクセス」で説明した「SurveyGateウェブページへアクセスする方法」と「アンケート一覧を取得する方法」について、詳細仕様を記載します。
SurveyGateウェブページへアクセスする方法
パラメータ仕様
| パラメータ名 | 論理名 | データ型 | 必須 | 説明 |
|---|---|---|---|---|
| mid | メディアID | 文字列 | ○ | メディアを識別するID(SurveyGate側から事前に通知される値) |
| mmid | メディアモニターID | 文字列 | ○ | モニターを一意に判別するID |
| hash | ハッシュ | 文字列 | ○ | 認証用ハッシュ値(hash計算仕様に従う) |
サンプルコード
サンプルコード(Node.js):
const crypto = require('crypto');
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildUrl(domain, mid, mmid, hashSecret) {
const canonicalString = `${hashSecret}-${mid}-${mmid}`;
const hash = crypto.createHash('sha256').update(canonicalString).digest('hex');
const params = new URLSearchParams({
mid: mid,
mmid: mmid,
hash: hash
});
return `https://${domain}/connect?${params.toString()}`;
}
const domain = 'surveygate.jp';
const mid = 'panelA';
const mmid = 'monitor0000000001';
const hashSecret = 'your-secret-key';
const url = buildUrl(domain, mid, mmid, hashSecret);
console.log(url);
サンプルコード(PHP):
<?php
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildUrl($domain, $mid, $mmid, $hashSecret) {
$canonicalString = $hashSecret . "-" . $mid . "-" . $mmid;
$hash = hash('sha256', $canonicalString);
$queryParams = [
'mid' => $mid,
'mmid' => $mmid,
'hash' => $hash
];
$queryString = http_build_query($queryParams);
return "https://{$domain}/connect?{$queryString}";
}
$domain = 'surveygate.jp';
$mid = 'panelA';
$mmid = 'monitor0000000001';
$hashSecret = 'your-secret-key';
$url = buildUrl($domain, $mid, $mmid, $hashSecret);
echo $url;
?>
エラー時の対応
モニターが生成されたURLにアクセスした際、URLの設定やhash計算に誤りがあると、400系や401系のエラーが返される場合があります。
その場合は、mid / mmid / hash の各パラメータが正しく設定されているか、hash計算仕様(署名対象文字列の形式、アルゴリズム、出力形式)が正しいかをご確認ください。
エラーが継続して発生する場合は、SurveyGate側のサポートにお問い合わせください。
アンケート一覧を取得する方法
メディアはAPI(POST /api/v2/enquetes)を呼び出し、レスポンスのアンケート一覧(data.enquetes)を利用して一覧を表示する方法です。
メディア側でアンケート一覧を表示し、モニターが「回答する」等のリンクをクリックすることでアンケート画面へ遷移します
リクエスト
基本情報:
| 項目 | 内容 |
|---|---|
| メソッド | POST |
| エンドポイント | /api/v2/enquetes |
リクエストヘッダー:
| ヘッダー名 | 必須 | 例 |
|---|---|---|
| Content-Type | ○ | application/json |
リクエストボディ:
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| mid | 文字列 | ○ | メディアID(パネルID) |
| mmid | 文字列 | ○ | モニターID(メディア側で一意) |
| hash | 文字列 | ○ | 認証用ハッシュ(hash計算仕様に従う) |
リクエスト例:
{
"mid": "panelA",
"mmid": "monitor0000000001",
"hash": "(hash計算仕様に従って生成した値)"
}
レスポンス
APIのレスポンスに含まれる data.enquetes の各要素の項目は以下のとおりです。
| 項目 | 型 | 説明 |
|---|---|---|
| enquete_id | 文字列 | アンケートID |
| enquete_name | 文字列 | アンケート名 |
| min_monitor_point | 数値 | 最小ポイント(1stは単一値のため min=max) |
| max_monitor_point | 数値 | 最大ポイント(全パート回答時の合計) |
| min_estimated_time | 数値 | 最小所要時間(分) |
| max_estimated_time | 数値 | 最大所要時間(分) |
| is_delay | boolean | 後日付与フラグ(後日付与の場合 true)。1stでは含まれない場合あり |
| point_grant_type | 数値 | ポイント付与区分(1: 自動付与, 2: 手動・後日付与) |
| status | 数値 | 回答ステータス(0: 未回答, 1: 回答済み, 2: 停止) |
| delivered_at | 日時/null | 配信日時。1stアンケートの場合は null |
| enquete_start_url | 文字列 | 開始URL。メディアは「回答する」の href 等に設定する。 形式: https://surveygate.jp/enquetes/start?enquete_id={enquete_id} |
サンプルコード
サンプルコード(Node.js):
const crypto = require('crypto');
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildRequestBody(mid, mmid, hashSecret) {
const canonicalString = `${hashSecret}-${mid}-${mmid}`;
const hash = crypto.createHash('sha256').update(canonicalString).digest('hex');
return { mid, mmid, hash };
}
// APIを1回呼び出す。レスポンスに data.enquetes が含まれる。
const mid = 'panelA';
const mmid = 'monitor0000000001';
const hashSecret = 'your-secret-key';
const body = buildRequestBody(mid, mmid, hashSecret);
const res = await fetch('https://surveygate.jp/api/v2/enquetes', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
const json = await res.json();
// json.data.enquetes[].enquete_start_url を「回答する」の href に設定する。
サンプルコード(PHP):
<?php
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildAuthBody($mid, $mmid, $hashSecret) {
$canonicalString = $hashSecret . "-" . $mid . "-" . $mmid;
$hash = hash('sha256', $canonicalString);
return ['mid' => $mid, 'mmid' => $mmid, 'hash' => $hash];
}
$mid = 'panelA';
$mmid = 'monitor0000000001';
$hashSecret = 'your-secret-key';
$body = buildRequestBody($mid, $mmid, $hashSecret);
// APIを1回呼び出す。レスポンスに data.enquetes が含まれる。
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($body)
]
]);
$res = @file_get_contents('https://surveygate.jp/api/v2/enquetes', false, $context);
$json = json_decode($res, true);
// $json['data']['enquetes'][*]['enquete_start_url'] を「回答する」の href に設定する。
?>
hash計算仕様
使用する値:
hash_secret: ハッシュシークレット(SurveyGate側から事前に通知される固有キー。URL生成時に使用)mid: メディアID(パラメータ仕様参照)mmid: メディアモニターID(パラメータ仕様参照)
アルゴリズム: SHA-256
文字コード: UTF-8
出力形式:
- 16進数(hex)
- 小文字(必須)
注意事項:
- 出力は16進数(hex)形式で、0-9とa-fの文字で表現されます
- 小文字での出力が必須です(SurveyGate側の検証処理は大文字小文字を区別するため、大文字で出力するとエラーになります)
計算手順:
hash_secret、mid、mmidをハイフン(-)で連結して署名対象文字列を作成
※区切り文字は固定で「-」(ハイフン)を使用
{hash_secret}-{mid}-{mmid}
- SHA-256(単純ハッシュ)でハッシュ化
- 16進数(小文字)で出力(必須)
注意事項:
mmidはメディア内で一意のIDを使用してくださいmmidに個人情報(メールアドレス等)を直接含めないでください- すべてのパラメータは必須です
サンプルコード
サンプルコード(Node.js):
const crypto = require('crypto');
function calculateHash(hashSecret, mid, mmid) {
const canonicalString = `${hashSecret}-${mid}-${mmid}`;
return crypto.createHash('sha256').update(canonicalString).digest('hex');
}
サンプルコード(PHP):
function calculateHash($hashSecret, $mid, $mmid) {
$canonicalString = $hashSecret . "-" . $mid . "-" . $mmid;
return hash('sha256', $canonicalString);
}
よくあるエラー原因:
- ハイフン区切りが誤っている
- SHA-256以外のアルゴリズムを使用している
- hex出力が大文字になっている
- UTF-8以外の文字コードで計算している
エラー発生時は、上記をご確認ください。