Skip to content

Instantly share code, notes, and snippets.

@YoshiteruIwasaki
Created November 19, 2020 13:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8 to your computer and use it in GitHub Desktop.
Save YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8 to your computer and use it in GitHub Desktop.
Intercom Conversations CSV Export
<?php
require_once "vendor/autoload.php";
ini_set('memory_limit', '-1');
date_default_timezone_set('Asia/Tokyo');
$filename = "intercom_conversations.csv";
use Intercom\IntercomClient;
$client = new IntercomClient('<YOUR API KEY>');
$conversations = array();
$companies = array();
$contacts = array();
$admins = array();
$columns = array(
"id",
"created_at",
"status",
"admin",
"company_id",
"company",
"external_id",
"name",
"conversation"
);
$header = array(
"id" => "ID",
"created_at" => "Created Date",
"status" => "Status",
"admin" => "Admin User",
"company_id" => "Company ID",
"company" => "Company",
"external_id" => "User ID",
"name" => "User Name",
"conversation" => "Conversation"
);
$f = fopen($filename, "w");
$numeric_row = array();
// Add header
foreach ($columns as $header_name) {
$numeric_row[] = $header[$header_name];
}
fputcsv($f, $numeric_row);
// get admins
print_r("==================\n");
print_r("\n");
print_r("get admins");
print_r("\n");
print_r("\n");
print_r("==================\n");
$result = $client->admins->getAdmins();
$total_pages = $result->pages->total_pages;
for ($i = 1; $i <= $total_pages; $i ++) {
foreach ($result->admins as $admin) {
$admins[$admin->id] = $admin->name;
}
if (! empty($result->pages->next)) {
$result = $client->nextPage($result->pages);
}
}
print_r(count($admins));
file_put_contents("admins.dat", serialize($admins));
// get contacts
print_r("==================\n");
print_r("\n");
print_r("get contacts");
print_r("\n");
print_r("\n");
print_r("==================\n");
$result = $client->contacts->getContacts([]);
$total_pages = $result->pages->total_pages;
for ($i = 1; $i <= $total_pages; $i ++) {
foreach ($result->data as $contact) {
$contacts[$contact->id] = $contact;
}
print_r($result->pages);
print_r("\n");
if (! empty($result->pages->next)) {
$result = $client->contacts->nextCursor($result->pages);
}
}
print_r(count($contacts));
file_put_contents("contacts.dat", serialize($contacts));
// get companies
print_r("==================\n");
print_r("\n");
print_r("get companies");
print_r("\n");
print_r("\n");
print_r("==================\n");
$result = $client->companies->getCompanies([]);
$total_pages = $result->pages->total_pages;
for ($i = 1; $i <= $total_pages; $i ++) {
foreach ($result->data as $company) {
$companies[$company->id] = $company;
}
print_r($result->pages);
print_r("\n");
if (! empty($result->pages->next)) {
$result = $client->nextPage($result->pages);
}
}
print_r(count($companies));
file_put_contents("companies.dat", serialize($companies));
// get conversations
print_r("==================\n");
print_r("\n");
print_r("get conversations");
print_r("\n");
print_r("\n");
print_r("==================\n");
$result = $client->conversations->getConversations([
'display_as' => 'plaintext'
]);
$total_pages = $result->pages->total_pages;
for ($i = 1; $i <= $total_pages; $i ++) {
foreach ($result->conversations as $conversation) {
$conversations[$conversation->id] = $conversation;
}
print_r($result->pages);
print_r("\n");
if (! empty($result->pages->next)) {
$result = $client->nextPage($result->pages);
}
}
print_r(count($conversations));
file_put_contents("conversations.dat", serialize($conversations));
// get conversation parts
print_r("==================\n");
print_r("\n");
print_r("get conversation parts");
print_r("\n");
print_r("\n");
print_r("==================\n");
foreach ($conversations as $conversation) {
$conversation_id = "";
$conversation_date = "";
$conversation_state = "";
$admin_name = "";
$company_id = "";
$company_name = "";
$user_id = "";
$user_name = "";
$text = "";
$array = array();
$conversation_id = $conversation->id;
$conversation_date = date('Y/m/d H:i:s', $conversation->created_at);
$conversation_state = $conversation->state;
if (! empty($conversation->admin_assignee_id) && array_key_exists($conversation->admin_assignee_id, $admins)) {
$admin_name = $admins[$conversation->admin_assignee_id];
}
if (! empty($conversation->source->author->id) && array_key_exists($conversation->source->author->id, $contacts)) {
$contact = $contacts[$conversation->source->author->id];
if (! empty($contact->companies) && count($contact->companies) > 0 && ! empty($contact->companies->data[0]->id) && array_key_exists($contact->companies->data[0]->id, $companies)) {
$company = $companies[$contact->companies->data[0]->id];
$company_id = $company->company_id;
$company_name = $company->name;
}
$user_id = $contact->external_id;
$user_name = $contact->name;
}
$text = date('Y/m/d H:i:s', $conversation->created_at) . " | ";
if (! empty($conversation->source->author->name)) {
$text .= $conversation->source->author->name;
}
$text .= ":" . $conversation->source->id;
$text .= "\n";
$text .= $conversation->source->body;
$text .= "\n";
$text .= "\n";
$detail = $client->conversations->getConversation($conversation->id, [
'display_as' => 'plaintext'
]);
if (! empty($detail->conversation_parts->conversation_parts)) {
foreach ($detail->conversation_parts->conversation_parts as $conversation_part) {
if ($conversation_part->part_type == "comment") {
$text .= date('Y/m/d H:i:s', $conversation_part->created_at) . " | ";
if (! empty($conversation_part->author->name)) {
$text .= $conversation_part->author->name;
}
$text .= ":" . $conversation_part->id;
$text .= "\n";
$text .= $conversation_part->body;
$text .= "\n";
$text .= "\n";
}
}
}
$array = array(
"id" => $conversation_id,
"created_at" => $conversation_date,
"status" => $conversation_state,
"admin" => $admin_name,
"company_id" => $company_id,
"company" => $company_name,
"external_id" => $user_id,
"name" => $user_name,
"conversation" => $text
);
$numeric_row = array();
foreach ($columns as $header_name) {
$numeric_row[] = $array[$header_name];
}
fputcsv($f, $numeric_row);
}
fclose($f);
print_r("==================\n");
print_r("\n");
print_r("end.");
print_r("\n");
print_r("\n");
print_r("==================\n");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment