V-Talk ウィジェット 埋め込みガイド
V-Talkウィジェットを貴社Webサイトに埋め込むための完全ガイドです。WordPress、静的HTML、React/Vue.jsなど各種環境での導入方法を解説します。
はじめに
本ガイドは、V-Talkウィジェットを貴社Webサイトに埋め込むための手順書です。V-Talkは、動画とAIチャットを組み合わせた対話型ウィジェットで、訪問者とのエンゲージメントを高めます。
本ガイドでは、WordPress、静的HTML、React/Vue/Next.jsなど各種環境での導入方法に加え、ページごとの表示制御や配置位置のカスタマイズ方法についても詳しく解説します。
基本情報
埋め込みスニペット
V-Talkウィジェットを導入するには、以下の2つの要素をWebサイトに追加します。
<script type="module" src="https://v-talk-dev-demonstration.web.app/assets/widget.js" defer></script>
<div id="v-talk-widget" data-user-id="YOUR_USER_ID" data-mobile-bottom="90px"></div>各要素の説明
| 要素 | 説明 | 必須 |
|---|---|---|
| <script> タグ | ウィジェットの動作に必要なJavaScriptファイルを読み込みます | ✓ |
| type="module" | ES Modulesとして読み込むための指定です | ✓ |
| defer | ページの読み込みを妨げずにスクリプトを実行します | ✓ |
| <div> タグ | ウィジェットのコンテナ要素です | ✓ |
| id="v-talk-widget" | ウィジェットが認識するための固定IDです | ✓ |
| data-user-id | 貴社専用のユーザーIDです(弊社より発行) | ✓ |
| data-mobile-bottom | モバイル表示時のボタン下部位置(例: "90px") | 任意 |
data-user-id の値は、弊社から発行された貴社専用のIDに置き換えてください。このIDが正しくないとウィジェットは動作しません。基本的な埋め込み方法
推奨される配置場所
スニペットは </body> タグの直前に配置することを推奨します。これにより、ページの表示速度に影響を与えずにウィジェットを読み込むことができます。
<!DOCTYPE html>
<html>
<head>
<title>貴社サイト</title>
<!-- その他のhead要素 -->
</head>
<body>
<!-- ページのコンテンツ -->
<!-- ↓ ここに配置(</body>の直前) -->
<script type="module" src="https://v-talk-dev-demonstration.web.app/assets/widget.js" defer></script>
<div id="v-talk-widget" data-user-id="YOUR_USER_ID" data-mobile-bottom="90px"></div>
</body>
</html>配置場所に関する注意点
| 配置場所 | 推奨度 | 説明 |
|---|---|---|
| </body> 直前 | ◎ 推奨 | ページ読み込み後にウィジェットが初期化されます |
| <head> 内 | △ 非推奨 | ページ表示が遅くなる可能性があります |
| <body> 直後 | ○ 可 | 動作しますが、推奨位置ではありません |
環境別の導入手順
WWordPress
WordPressでの導入方法は、使用しているテーマやプラグインによって異なります。以下に代表的な3つの方法を紹介します。
方法A: テーマのfooter.phpを編集する(推奨)
この方法は最も確実ですが、テーマのアップデート時に上書きされる可能性があるため、子テーマの使用を推奨します。
- WordPress管理画面にログインします
- 「外観」→「テーマファイルエディター」を開きます
- 右側のファイル一覧から
footer.phpを選択します </body>タグを探し、その直前にスニペットを追加します- 「ファイルを更新」をクリックして保存します
<!-- V-Talk Widget -->
<script type="module" src="https://v-talk-dev-demonstration.web.app/assets/widget.js" defer></script>
<div id="v-talk-widget" data-user-id="YOUR_USER_ID"></div>
<?php wp_footer(); ?>
</body>
</html>方法B: プラグインを使用する
コードを直接編集したくない場合は、「Insert Headers and Footers」や「WPCode」などのプラグインを使用できます。
- 「プラグイン」→「新規追加」で「Insert Headers and Footers」を検索してインストール・有効化します
- 「設定」→「Insert Headers and Footers」を開きます
- 「Scripts in Footer」欄にスニペットを貼り付けます
- 「Save」をクリックして保存します
方法C: functions.phpにフックを追加する
テーマのfunctions.phpに以下のコードを追加することで、全ページにウィジェットを表示できます。
// V-Talk Widget
function add_vtalk_widget() {
?>
<script type="module" src="https://v-talk-dev-demonstration.web.app/assets/widget.js" defer></script>
<div id="v-talk-widget" data-user-id="YOUR_USER_ID"></div>
<?php
}
add_action('wp_footer', 'add_vtalk_widget');H静的HTML
静的HTMLサイトの場合は、各HTMLファイルの </body> タグ直前にスニペットを追加します。 複数のページがある場合は、共通のフッターファイルがあればそこに追加することで、一括管理が可能です。
RReact / Next.js
Reactベースのアプリケーションでは、useEffectを使用してウィジェットを動的に読み込みます。
import { useEffect } from 'react';
function VTalkWidget() {
useEffect(() => {
// スクリプトが既に存在するか確認
if (document.querySelector('script[src*="v-talk"]')) {
return;
}
// スクリプトを作成して追加
const script = document.createElement('script');
script.type = 'module';
script.src = 'https://v-talk-dev-demonstration.web.app/assets/widget.js';
script.defer = true;
document.body.appendChild(script);
// コンテナを作成して追加
if (!document.getElementById('v-talk-widget')) {
const widgetDiv = document.createElement('div');
widgetDiv.id = 'v-talk-widget';
widgetDiv.setAttribute('data-user-id', 'YOUR_USER_ID');
widgetDiv.setAttribute('data-mobile-bottom', '90px');
document.body.appendChild(widgetDiv);
}
// クリーンアップ関数(コンポーネントがアンマウントされた時に実行)
return () => {
const widgetDiv = document.getElementById('v-talk-widget');
if (widgetDiv) widgetDiv.remove();
const triggerBtn = document.getElementById('v-talk-trigger-btn');
if (triggerBtn) triggerBtn.remove();
const allWidgetElements = document.querySelectorAll('[id^="v-talk"]');
allWidgetElements.forEach(el => el.remove());
const scriptEl = document.querySelector('script[src*="v-talk"]');
if (scriptEl) scriptEl.remove();
};
}, []);
return null;
}
export default VTalkWidget;<VTalkWidget /> を配置します。VVue.js / Nuxt.js
Vue.jsでは、onMountedフックを使用します。
<script setup>
import { onMounted, onUnmounted } from 'vue';
onMounted(() => {
if (document.querySelector('script[src*="v-talk"]')) {
return;
}
const script = document.createElement('script');
script.type = 'module';
script.src = 'https://v-talk-dev-demonstration.web.app/assets/widget.js';
script.defer = true;
document.body.appendChild(script);
if (!document.getElementById('v-talk-widget')) {
const widgetDiv = document.createElement('div');
widgetDiv.id = 'v-talk-widget';
widgetDiv.setAttribute('data-user-id', 'YOUR_USER_ID');
widgetDiv.setAttribute('data-mobile-bottom', '90px');
document.body.appendChild(widgetDiv);
}
});
onUnmounted(() => {
const elements = document.querySelectorAll('[id^="v-talk"]');
elements.forEach(el => el.remove());
const script = document.querySelector('script[src*="v-talk"]');
if (script) script.remove();
});
</script>WWix
- Wixエディターで対象のサイトを開きます
- 左メニューから「設定」→「カスタムコード」を選択します
- 「+ カスタムコードを追加」をクリックします
- スニペットを貼り付け、配置場所を「Body - end」に設定します
- 適用するページを選択して保存します
SShopify
- Shopify管理画面から「オンラインストア」→「テーマ」を開きます
- 「アクション」→「コードを編集」をクリックします
theme.liquidファイルを開きます</body>タグの直前にスニペットを追加します- 保存します
ページごとの表示制御
特定のページにのみウィジェットを表示したい場合や、逆に特定のページでは非表示にしたい場合の設定方法を解説します。
WordPress での表示制御
特定のページにのみ表示する
function add_vtalk_widget() {
// 表示したいページのスラッグまたはIDを指定
if (is_page('contact') || is_page('about') || is_page(123)) {
?>
<script type="module" src="https://v-talk-dev-demonstration.web.app/assets/widget.js" defer></script>
<div id="v-talk-widget" data-user-id="YOUR_USER_ID" data-mobile-bottom="90px"></div>
<?php
}
}
add_action('wp_footer', 'add_vtalk_widget');特定のページでは非表示にする
function add_vtalk_widget() {
// 非表示にしたいページを除外
if (!is_page('privacy-policy') && !is_page('terms')) {
?>
<script type="module" src="https://v-talk-dev-demonstration.web.app/assets/widget.js" defer></script>
<div id="v-talk-widget" data-user-id="YOUR_USER_ID" data-mobile-bottom="90px"></div>
<?php
}
}
add_action('wp_footer', 'add_vtalk_widget');よく使用する条件分岐
| 条件関数 | 説明 | 使用例 |
|---|---|---|
| is_page('slug') | 特定の固定ページ | is_page('contact') |
| is_page(ID) | ページIDで指定 | is_page(123) |
| is_front_page() | トップページ | is_front_page() |
| is_single() | 投稿ページ | is_single() |
| is_category('slug') | 特定のカテゴリ | is_category('news') |
配置位置のカスタマイズ
V-Talkウィジェットのトリガーボタン(「質問はこちらから」ボタン)は、デフォルトで画面右下に表示されます。この位置をCSSで調整することが可能です。
基本的な位置調整
/* トリガーボタンの位置調整 */
#v-talk-trigger-btn {
/* 右からの距離(デフォルト: 20px) */
right: 20px !important;
/* 下からの距離(デフォルト: 20px) */
bottom: 20px !important;
}位置パターン別の設定例
| 配置位置 | CSS設定 |
|---|---|
| 右下(デフォルト) | right: 20px; bottom: 20px; |
| 左下 | left: 20px; right: auto; bottom: 20px; |
| 右上 | right: 20px; top: 20px; bottom: auto; |
| 左上 | left: 20px; right: auto; top: 20px; bottom: auto; |
モバイル対応
モバイルデバイスでは、ボタンが他の要素と重なる場合があります。メディアクエリを使用して調整できます。
/* モバイルでの位置調整 */
@media (max-width: 768px) {
#v-talk-trigger-btn {
right: 10px !important;
bottom: 70px !important; /* フッターナビと重ならないように */
}
}z-indexの調整
ウィジェットが他の要素の下に隠れてしまう場合は、z-indexを調整します。
#v-talk-trigger-btn,
#v-talk-widget {
z-index: 9999 !important;
}よくあるミスと対処法
❌ ウィジェットが表示されない
| 原因 | 確認方法 | 対処法 |
|---|---|---|
| スニペットが正しく配置されていない | ブラウザの「ページのソースを表示」でスニペットを検索 | </body> 直前に正しく配置する |
| data-user-idが間違っている | スニペット内のIDを確認 | 弊社から発行されたIDに置き換える |
| JavaScriptエラーが発生している | ブラウザの開発者ツール(F12)→ Consoleタブを確認 | エラー内容に応じて対処 |
| キャッシュが残っている | ブラウザのキャッシュをクリア | Ctrl+Shift+R(Mac: Cmd+Shift+R)で強制リロード |
❌ ページ遷移後もウィジェットが残る(SPA)
原因: シングルページアプリケーションでクリーンアップ処理が実装されていない。
対処法: コンポーネントのアンマウント時に、以下の要素を削除するクリーンアップ処理を追加してください。
// 削除すべき要素
const elementsToRemove = [
'#v-talk-widget',
'#v-talk-trigger-btn',
'[id^="v-talk"]', // v-talk で始まるすべてのID
'script[src*="v-talk"]'
];
elementsToRemove.forEach(selector => {
document.querySelectorAll(selector).forEach(el => el.remove());
});❌ ウィジェットが他の要素の下に隠れる
原因: z-indexの競合。
対処法: CSSで z-index を高い値に設定します。
#v-talk-trigger-btn,
[id^="v-talk"] {
z-index: 999999 !important;
}❌ WordPressでテーマ更新後にウィジェットが消える
原因: 親テーマのfooter.phpを直接編集していた。
対処法: 子テーマを作成して使用するか、functions.phpにフックを追加する方法を使用する(テーマ更新の影響を受けにくい)。
動作確認チェックリスト
埋め込み作業完了後、以下の項目を確認してください。
基本動作確認
- ウィジェットのトリガーボタン(「質問はこちらから」)が表示されている
- トリガーボタンをクリックするとウィジェットウィンドウが開く
- ウィジェットウィンドウ内に動画が表示される
- チャット機能が動作する
- ウィジェットウィンドウを閉じることができる
表示制御の確認(設定した場合)
- 表示対象ページでウィジェットが表示される
- 非表示対象ページでウィジェットが表示されない
- ページ遷移後に意図しない表示/非表示が発生しない
レスポンシブ確認
- PC(デスクトップ)で正常に表示される
- タブレットで正常に表示される
- スマートフォンで正常に表示される
- モバイルでフッターナビなどと重なっていない
ブラウザ確認
- Google Chrome で動作する
- Safari で動作する
- Firefox で動作する
- Microsoft Edge で動作する
FAQ
Q1: ウィジェットの色やデザインを変更できますか?
現時点では、ウィジェットのデザインは標準仕様となっております。カスタマイズをご希望の場合は、弊社までお問い合わせください。
Q2: 複数のサイトで同じuser-idを使用できますか?
いいえ、user-idはサイトごとに発行されます。複数のサイトに導入する場合は、それぞれのサイト用のuser-idを弊社にご依頼ください。
Q3: ウィジェットの読み込みでサイトの表示速度に影響はありますか?
defer 属性を使用しているため、ページの初期表示には影響しません。ウィジェットはページの読み込み完了後に初期化されます。
Q4: SSL(https)に対応していますか?
はい、V-Talkウィジェットは完全にSSLに対応しています。http/https どちらの環境でも動作しますが、セキュリティの観点からhttps環境での使用を推奨します。
Q5: Google Tag Manager(GTM)から導入できますか?
はい、GTMからの導入も可能です。カスタムHTMLタグとしてスニペットを追加し、トリガーを「All Pages」または特定のページに設定してください。
お問い合わせ
本ガイドに関するご質問や、導入でお困りの際は、以下までお問い合わせください。