Fatti:
A.
Il 14 luglio 2007, al termine di lavori di rinnovamento e ampliamento di uno stabile a Diessenhofen, la committente C._ AG ha chiesto all'appaltatrice D._ SA di restituire al proprio amministratore E._ l'importo di fr. 40'000.-- versato ma non registrato nei conteggi di liquidazione.
La D._ SA era stata messa in liquidazione il 25 novembre 2006 ed è stata radiata dal registro di commercio il 25 giugno 2008. L'architetto F._ ne era stato prima il direttore poi il liquidatore, con diritto di firma individuale. Il 1° dicembre 2006 è stata iscritta nel registro di commercio la A._ Sagl della quale F._ è socio gerente con diritto di firma individuale.
B.
Con scritto del 27 agosto 2007, trasmesso per telefax, la A._ Sagl ha comunicato a E._ presso la C._ AG di essere pienamente d'accordo con la restituzione del predetto importo, che sarebbe iniziata il 1° settembre 2007 con un primo pagamento di fr. 5'000.-- a E._ e sarebbe terminata al più tardi il 1° settembre 2008. La A._ Sagl ha versato fr. 5'000.-- a E._ il 3 settembre 2007 poi più nulla, malgrado le sollecitazioni che la C._ AG ha indirizzato a quella società, a F._ personalmente e alla D._ SA.
La C._ AG ha ceduto il suo credito residuo di fr. 35'000.-- per capitale e fr. 5'443.-- d'interessi alla società d'incasso B._ AG, la quale ha fatto notificare alla A._ Sagl un precetto esecutivo per fr. 40'000.--, più interessi al 5% dal 31 luglio 2007. L'opposizione della debitrice è stata rigettata in via provvisoria per fr. 35'000.-- e interessi con decisione del 30 settembre 2010 dal Pretore di Lugano, confermata il 3 dicembre 2010 dalla Camera di esecuzione e fallimenti del Tribunale di appello ticinese.
C.
Con petizione del 20 dicembre 2010 la A._ Sagl ha chiesto al Pretore di Lugano che fosse "disconosciuto il debito di fr. 40'000.-- oltre accessori". La B._ AG si è opposta all'azione.
Il Pretore di Lugano ha respinto la petizione il 18 luglio 2012. La II Camera civile del Tribunale di appello del Cantone Ticino ha respinto l'appellazione dell'attrice, nella misura in cui l'ha considerata ricevibile, con sentenza del 29 ottobre 2013.
D.
La A._ Sagl insorge davanti al Tribunale federale con ricorso in materia civile "e contestuale ricorso sussidiario in materia costituzionale" del 2 dicembre 2013. Chiede l'annullamento della sentenza cantonale e in via principale postula l'accoglimento del suo appello e l'accertamento dell'inesistenza del suo debito di fr. 40'000.-- e accessori, mentre in via subordinata domanda il rinvio della causa al Tribunale di appello per nuovo giudizio.
Con risposta 22 gennaio 2014 la B._ AG propone di respingere il gravame. L'autorità cantonale non ha preso posizione.

Diritto:
1.
Il ricorso è presentato dalla parte soccombente nella sede cantonale (art. 76 cpv. 1 lett. a LTF), è tempestivo (art. 100 cpv. 1 LTF) ed è volto contro una sentenza finale (art. 90 LTF) emanata su ricorso dall'autorità ticinese di ultima istanza (art. 75 LTF) in una causa civile (art. 72 cpv. 1 LTF). La ricorrente persiste nel chiedere il disconoscimento del debito di fr. 40'000.--, benché la sentenza d'appello faccia stato, giustamente, di un debito di fr. 35'000.--, corrispondente all'importo per il quale il Pretore di Lugano ha rigettato provvisoriamente l'opposizione; poco importa, il valore litigioso è in ogni caso superiore a fr. 30'000.-- (art. 74 cpv. 1 lett. b LTF).
Il ricorso in materia civile è perciò in linea di principio ammissibile, ciò che esclude d'entrata il ricorso sussidiario in materia costituzionale (art. 113 LTF). La ricorrente non si cura del resto di spiegare i motivi per i quali propone anche questo rimedio accanto a quello ordinario.
2.
La violazione del diritto federale è motivo di ricorso secondo l'art. 95 lett. a LTF. Il Tribunale federale esamina d'ufficio l'applicazione del diritto federale (art. 106 cpv. 1 LTF). Tuttavia, tenuto conto dell'onere di allegazione e motivazione imposto dall'art. 42 cpv. 1 e 2 LTF, il cui mancato rispetto conduce all'inammissibilità del gravame (art. 108 cpv. 1 lett. b. LTF), esso considera di regola solo gli argomenti proposti nell'atto di ricorso (<ref-ruling> consid. 2; <ref-ruling> consid.1.1). La violazione del diritto cantonale non può invece essere fatta valere davanti al Tribunale federale, con eccezione dei casi previsti all'art. 95 lett. c, d ed e LTF. Il ricorrente può però prevalersi del fatto che la cattiva applicazione del diritto cantonale viola il diritto federale, in particolare il divieto dell'arbitrio sancito dall'art. 9 Cost. Questa censura esige una motivazione specifica nel senso dell'art. 106 cpv. 2 LTF. Non basta criticare la decisione cantonale come se ci si trovasse in istanza di appello, opponendo la propria tesi a quella dell'autorità inferiore; occorre spiegare almeno succintamente qual è il diritto costituzionale leso e in cosa consiste la violazione, per giungere a dimostrare che la decisione impugnata poggia su di un'applicazione della legge manifestamente insostenibile (<ref-ruling> consid. 2.2; <ref-ruling> consid. 3 e rinvii).
In linea di massima il Tribunale federale fonda il suo ragionamento giuridico sull'accertamento dei fatti svolto dall'autorità inferiore (art. 105 cpv. 1 LTF). Può scostarsene o completarlo solo se è stato effettuato in violazione del diritto ai sensi dell'art. 95 LTF o in modo manifestamente inesatto (art. 105 cpv. 2 LTF). L'accertamento dei fatti contenuto nella sentenza impugnata può essere censurato alle stesse condizioni; occorre inoltre che l'eliminazione dell'asserito vizio possa influire in maniera determinante sull'esito della causa (art. 97 cpv. 1 LTF).
Se rimprovera all'autorità cantonale un accertamento dei fatti manifestamente inesatto - che significa arbitrario (<ref-ruling> consid. 4.2 con rinvi) - il ricorrente deve motivare la censura conformemente alle predette esigenze dell'art. 106 cpv. 2 LTF (cfr. anche <ref-ruling> consid. 2.5 pag. 314; <ref-ruling> consid. 2.2). Siccome il giudice cantonale fruisce di un grande potere discrezionale nel campo dell'apprezzamento delle prove (e dell'accertamento dei fatti in genere), il ricorrente che invoca l'arbitrio deve dimostrare che la sentenza impugnata ha ignorato il senso e la portata di un mezzo di prova preciso, ha omesso senza ragioni valide di tenere conto di una prova importante suscettibile di modificare l'esito della lite, oppure ha ammesso o negato un fatto ponendosi in aperto contrasto con gli atti di causa o interpretandoli in modo insostenibile (<ref-ruling> consid. 4.1.2 pag. 62; <ref-ruling> consid. 4.3 pag. 62; <ref-ruling> consid. 2.1).
3.
La sentenza cantonale espone che la ricorrente, davanti alle istanze cantonali, ha sostenuto che l'impegno trasmesso per telefax il 27 agosto 2007 riguardava i rapporti di F._ ed E._, agenti entrambi a titolo personale, non in rappresentanza rispettivamente di A._ Sagl e C._ AG. La Corte di appello ha dichiarato tale assunto irricevibile in applicazione dell'art. 78 cpv. 1 e 2 CPC/TI, essendo stato proposto per la prima volta con le conclusioni. Essa ha nondimeno considerato, subordinatamente e rinviando alle ragioni evidenziate dal Pretore, che il "chiarissimo tenore" dello scritto del 27 agosto 2007 attesta che l'impegno di restituzione di fr. 40'000.-- nei confronti della C._ AG è stato assunto dalla ricorrente, la quale aveva del resto effettuato il primo pagamento di fr. 5'000.--.
3.1. La ricorrente definisce l'argomentazione principale dell'autorità cantonale "uno sproposito"; la ritiene frutto di un accertamento palesemente errato dei fatti e costitutiva di arbitrio nell'applicazione del diritto cantonale. Spiega di avere " sollevato il problema della legittimazione delle parti e del ruolo del Dr. E._ in relazione a F._" fin dall'inizio, prima nella procedura di rigetto dell'opposizione, poi in questa causa di disconoscimento; a sostegno di ciò riproduce alcuni passaggi di scritti presentati nell'ambito delle procedure sommaria e di merito.
La censura è manifestamente infondata. D'un canto, ciò che la ricorrente ha sostenuto nella procedura sommaria di rigetto dell'opposizione non è evidentemente di rilievo per valutare la completezza delle sue allegazioni in questa causa. Dall'altro, sebbene nei passaggi di risposta e duplica ch'essa cita contestasse effettivamente il credito per il motivo che non riteneva "adempiuti i profili di legittimazione (attiva e passiva) e, di riflesso, dell'identità delle parti", la tesi che stava alla base di tale argomentazione era che i rapporti contrattuali d'appalto erano intercorsi solo tra la D._ SA e la C._ AG, la quale - e per essa l'opponente - non era pertanto legittimata ad agire contro la A._ Sagl. La ricorrente non aveva affatto sostenuto che F._ ed E._ avessero agito a titolo personale; anzi nella replica scriveva addirittura che "F._ non ha stretto alcun impegno di pagamento e quindi non deve dare seguito a nulla".
3.2. La ricorrente contesta anche la motivazione subordinata della sentenza impugnata. Premette di non potere "far altro che ribadire testualmente gli argomenti già addotti in appello"e, in effetti, elenca una lunga serie di fatti e considerazioni che, in definitiva, ruotano ancora attorno alla sua tesi centrale secondo la quale lei non avrebbe nulla a che vedere con il contratto che vigeva tra la D._ SA e la C._ AG.
Le critiche così formulate sono inammissibili. La ricorrente contrappone semplicemente il proprio punto di vista a quello dei giudici cantonali, adducendo fatti che non risultano dalla sentenza impugnata e senza premurarsi di dimostrare l'arbitrio di quelli che vi sono accertati (cfr. consid. 2). L'elencazione degli elementi che la ricorrente ritiene determinanti non è nemmeno riferita alla motivazione della Corte cantonale; il ricorso non si confronta né con la parte autonoma di tale motivazione, che considera "chiarissimo" il contenuto della comunicazione del 27 agosto 2007, né con la parte recepita dalla sentenza di primo grado. Il Pretore aveva in effetti evidenziato che l'impegno di pagamento era stato scritto su carta intestata della A._ Sagl, che F._ aveva anteposto tale ragione sociale alla propria firma, che il primo acconto di fr. 5'000.-- era stato pagato dalla società ricorrente a E._ senza che fosse stata provata l'asserita esistenza di un suo credito personale e, infine, che destinataria del telefax era la C._ AG, poiché diversi elementi dimostravano che E._ agiva in veste di organo di questa società.
4.
Una volta appurato che l'impegno del 27 agosto 2007 è un valido riconoscimento di debito della ricorrente nei confronti della C._ AG, rispettivamente dell'opponente cessionaria del credito, la Corte ticinese ha ricordato che in forza dell'art. 17 CO la sola produzione del documento basta per fondare la pretesa litigiosa; poco importa che il riconoscimento sia astratto o causale. In tali circostanze, ha soggiunto, non sarebbe nemmeno necessario esaminare se la ricorrente avesse assunto l'obbligo di restituzione originariamente a carico della BX Architects SA. Ciononostante i giudici di appello hanno constatato che la ricorrente non ha "censurato l'assunto pretorile secondo cui essa ne avrebbe offerto l'assunzione già in occasione della telefonata tra l'arch. F._ e il dr. E._"e ha stabilito che, ad ogni modo, l'assunzione del debito era stata offerta nuovamente con il telefax del 27 agosto 2007 e approvata dalla C._ AG, la quale aveva accettato senza riserve l'impegno e il primo pagamento di fr. 5'000.--. Il fatto che la C._ AG avesse in seguito chiesto il pagamento del saldo alla D._ SA e a F._, oltre che alla ricorrente, non mutava tale conclusione "non risultando che quell'assunzione (esterna) di debito fosse solo esclusiva e non invece cumulativa".
4.1. La ricorrente insorge contro tale parte del giudizio rimproverando la Corte di appello per avere violato molte norme del diritto cantonale e federale: gli art. 13, 17, 18, 175, 176 e 243 CO, 82 LEF, 57 CPC, 9, 29 e 29a Cost. e 87 CPC/TI. Afferma che il riconoscimento di debito è privo di causa, non essendovi stati rapporti contrattuali tra lei e la C._ AG; che l'autorità cantonale confonde gli istituti dell'assunzione e del riconoscimento di un debito, dimenticando che il primo deve necessariamente precedere il secondo; che l'assunzione di un debito non può avvenire a titolo gratuito, per cui si potrebbe tutt'al più ipotizzare la stipulazione di una promessa di donare, della quale - conclude la ricorrente - non sarebbe però adempiuto il requisito della forma scritta.
4.2. Quest'argomentazione è piuttosto confusa e tocca solo marginalmente la motivazione dei giudici ticinesi. È manifestamente infondata laddove la ricorrente sostiene che il riconoscimento di debito poggia su di una causa inesistente. I giudici cantonali hanno infatti stabilito che la ricorrente ha offerto di assumere, assunto, riconosciuto e pagato in parte il debito originario della D._ SA verso la C._ AG relativo alla restituzione della mercede d'appalto percepita in eccesso e che la creditrice ha accettato tanto l'assunzione del debito quanto il primo pagamento. Questa conclusione, fondata su accertamenti di fatto vincolanti, non confonde assunzione e riconoscimento di debito e non viola nessuna delle disposizioni di diritto elencate nel ricorso, in particolare l'art. 17 CO.
La ricorrente accenna indistintamente agli art. 175 e 176 CO dimenticando che la prima disposizione regge l'assunzione di debito interna, la seconda quella esterna. L'argomento - errato - secondo cui l'assunzione di debito non potrebbe avvenire senza controprestazione e l'ipotesi di una promessa di donazione - che si verificherebbe proprio in caso di promessa di assunzione gratuita (cfr. RUDOLF TSCHÄNI, Basler Kommentar, Obligationenrecht I, 5aed. 2011, n. 5 ad art. 175 CO; THOMAS PROBST, Commentaire romand, 2aed. 2012, n. 3 ad art. 175 CO) - riguardano i rapporti interni tra assuntore e debitore precedente, che non sono in discussione in questa causa. Il litigio verte invece sull'assunzione di debito esterna contratta dalla A._ Sagl (assuntrice) con la C._ AG (creditrice). Il negozio non è retto nemmeno dall'art. 176 CO. La Corte cantonale ha stabilito che le due società hanno pattuito un'assunzione cumulativa di debito, istituto che non è definito dal CO ( RUDOLF TSCHÄNI, op. cit., n. 2 ad art. 176 CO). La ricorrente non contesta e non prende in considerazione tale qualificazione.
5.
Ne viene l'infondatezza del ricorso, nella misura in cui è ammissibile. Le spese giudiziarie della procedura federale e le ripetibili sono caricate alla parte soccombente (art. 66 cpv. 1 e 68 cpv. 1 LTF).

Per questi motivi, il Tribunale federale pronuncia:
1.
Il ricorso sussidiario in materia costituzionale è inammissibile.
2.
Nella misura in cui è ammissibile, il ricorso in materia civile è respinto.
3.
Le spese giudiziarie di fr. 2'000.-- sono poste a carico della ricorrente, che rifonderà all'opponente fr. 2'500.-- a titolo di ripetibili per la procedura innanzi al Tribunale federale.
4.
Comunicazione ai patrocinatori delle parti e alla II Camera civile del Tribunale d'appello del Cantone Ticino.