Skip to main content

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側のサポートにお問い合わせください。

アンケート一覧を取得する方法

メディアはAPIPOST /api/v2/enquetes)を呼び出し、レスポンスのアンケート一覧(data.enquetes)を利用して一覧を表示する方法です。
メディア側でアンケート一覧を表示し、モニターが「回答する」等のリンクをクリックすることでアンケート画面へ遷移します

リクエスト

基本情報:

項目内容
メソッドPOST
エンドポイント/api/v2/enquetes

リクエストヘッダー:

ヘッダー名必須
Content-Typeapplication/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_delayboolean後日付与フラグ(後日付与の場合 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側の検証処理は大文字小文字を区別するため、大文字で出力するとエラーになります)

計算手順:

  1. hash_secretmidmmidをハイフン(-)で連結して署名対象文字列を作成
    ※区切り文字は固定で「-」(ハイフン)を使用
{hash_secret}-{mid}-{mmid}
  1. SHA-256(単純ハッシュ)でハッシュ化
  2. 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以外の文字コードで計算している

エラー発生時は、上記をご確認ください。