Some hacked scripts to download all Intercom users and delete those who have 0 conversations
import request from 'request';
export function getConversations(waiterioUserId) {
return new Promise((resolve, reject) => {
request(`https://api.intercom.io/conversations?type=user&user_id=${waiterioUserId}`, {
auth: { user: 'YOUR_AUTHENTICATION_TOKEN_FROM_INTERCOM' },
headers: { Accept: 'application/json' },
}, (error, response, body) => {
if (error) {
// console.error(error);
reject(error);
} else {
// console.log(body);
const bodyObject = body ? JSON.parse(body) : null;
if (bodyObject.error) {
bodyObject.error.status = bodyObject.error.code;
reject(bodyObject.error);
} else {
resolve(bodyObject.conversations);
}
}
});
});
}
export function getUserByEmail(email) {
return new Promise((resolve, reject) => {
let url = `https://api.intercom.io/users?email=${email}`;
request(url, {
auth: { user: 'YOUR_AUTHENTICATION_TOKEN_FROM_INTERCOM' },
headers: { Accept: 'application/json' },
}, (error, response, body) => {
if (error) {
// console.error(error);
reject(error);
} else {
// console.log(body);
const bodyObject = body ? JSON.parse(body) : null;
if (bodyObject.error) {
bodyObject.error.status = bodyObject.error.code;
reject(bodyObject.error);
} else {
const usersLength = bodyObject && bodyObject.users ? bodyObject.users.length : 0;
console.log(`getUsersByEmail(${email}) returned ${JSON.stringify(bodyObject, null, 4)} user`);
resolve(bodyObject);
}
}
});
});
}
export function getUsersByPage(page) {
return new Promise((resolve, reject) => {
let url = 'https://api.intercom.io/users?per_page=60&order=asc';
if (page) {
url += `&page=${page}`;
}
request(url, {
auth: { user: 'YOUR_AUTHENTICATION_TOKEN_FROM_INTERCOM' },
headers: { Accept: 'application/json' },
}, (error, response, body) => {
if (error) {
// console.error(error);
reject(error);
} else {
// console.log(body);
const bodyObject = body ? JSON.parse(body) : null;
if (bodyObject.error) {
bodyObject.error.status = bodyObject.error.code;
reject(bodyObject.error);
} else {
const usersLength = bodyObject && bodyObject.users ? bodyObject.users.length : 0;
console.log(`getUsersByPage(${page}) returned ${usersLength} users`);
// if (usersLength === 0) {
// console.log(JSON.stringify(bodyObject, null, 4));
// }
resolve(bodyObject);
}
}
});
});
}
export function getUsers() {
return getUsersByPage().then(response => {
console.log(`${response.pages.total_pages} pages`);
const promises = [];
for (let i = 50; i <= 80;/* response.pages.total_pages*/ i += 1) {
promises.push(getUsersByPage(i).then(response => response.users));
}
return Promise.all(promises).then(users => [].concat(...users));
});
}
export function deleteUser(waiterioUserId) {
return new Promise((resolve, reject) => {
request(`https://api.intercom.io/users?user_id=${waiterioUserId}`, {
method: 'DELETE',
auth: { user: 'YOUR_AUTHENTICATION_TOKEN_FROM_INTERCOM' },
headers: { Accept: 'application/json' },
}, (error, response, body) => {
if (error) {
// console.error(error);
reject(error);
} else {
// console.log(body);
const bodyObject = body ? JSON.parse(body) : null;
if (bodyObject.error) {
bodyObject.error.status = bodyObject.error.code;
reject(bodyObject.error);
} else {
resolve(bodyObject);
}
}
});
});
}
const intercomUsers = require('./intercom-users.json');
const Intercom = require('./Intercom');
console.log(`Found ${intercomUsers.length} intercom users`);
async function deleteIntercomUsersWithNoConversations () {
for (var i = 0; i < intercomUsers.length; i++) {
const userId = intercomUsers[i].user_id;
let conversations = await Intercom.getConversations(userId);
if (conversations) {
if (conversations.length === 0) {
await Intercom.deleteUser(userId);
console.log(`${i+1} Deleted user ${userId} with no conversations`);
} else {
console.log(`${i+1} Skipping user ${userId} with ${conversations.length} conversations`);
}
}
}
}
deleteIntercomUsersWithNoConversations().then(process.exit);
process.on('unhandledRejection', error => {
console.error('process on unhandledRejection', error);
process.exit(1);
});
const fs = require('fs');
const fetch = require('isomorphic-fetch');
const headers = {
'Authorization': 'Bearer YOUR_AUTHENTICATION_TOKEN_FROM_INTERCOM',
'Accept': 'application/json'
};
function getScroll (scroll_param) {
let url = `https://api.intercom.io/users/scroll`;
if (scroll_param) {
url += `?scroll_param=${scroll_param}`
}
return fetch(url, { headers })
.then(response => response.json())
.then(response => {
if (response.errors) {
console.log(`error ${JSON.stringify(response.errors)}`);
} else if (response.users) {
console.log(`found ${response.users.length} users`);
}
return response;
});
}
async function getUsers () {
let scroll_param;
let finished = false;
let users = [];
while (!finished) {
let scroll = await getScroll(scroll_param);
users = users.concat(scroll.users);
if (scroll.scroll_param) {
scroll_param = scroll.scroll_param;
} else {
finished = true;
}
}
return users;
}
getUsers().then(users => {
console.log(`${users.length} users`);
fs.writeFile('intercom-users.json', JSON.stringify(users, null, 4), function (err) {
if (err) return console.log(err);
process.exit();
});
});